// 通用已点（购物车）工具模块
// 存储结构：数组，每项 { id, name, image, count, data }
// 说明：
// - id：菜品唯一标识（来自菜品 _id）
// - name：菜品名称
// - image：菜品图片（原始字段保留可能为字符串或数组）
// - count：数量
// - data：原始菜品对象（保留以便后续展示更多信息）

const STORAGE_KEY = 'app_cart_items'

function getCart() {
  try {
    const list = uni.getStorageSync(STORAGE_KEY)
    if (Array.isArray(list)) return list
    return []
  } catch (e) {
    return []
  }
}

function saveCart(items) {
  try {
    uni.setStorageSync(STORAGE_KEY, Array.isArray(items) ? items : [])
  } catch (e) {}
}

function getTotalCount() {
  const items = getCart()
  return items.reduce((sum, it) => sum + (Number(it.count) || 0), 0)
}

function addItem(dish, count = 1) {
  if (!dish || !dish._id) return getCart()
  const items = getCart()
  const id = dish._id
  const idx = items.findIndex(it => it.id === id)
  const n = Math.max(1, Number(count) || 1)
  if (idx > -1) {
    items[idx].count = (Number(items[idx].count) || 0) + n
  } else {
    items.push({
      id,
      name: dish.name || '',
      image: dish.image || dish.icon || '',
      count: n,
      data: dish
    })
  }
  saveCart(items)
  return items
}

function updateCount(id, count) {
  const items = getCart()
  const idx = items.findIndex(it => it.id === id)
  if (idx > -1) {
    const n = Math.max(0, Number(count) || 0)
    if (n === 0) {
      items.splice(idx, 1)
    } else {
      items[idx].count = n
    }
    saveCart(items)
  }
  return items
}

function removeItem(id) {
  const items = getCart()
  const idx = items.findIndex(it => it.id === id)
  if (idx > -1) {
    items.splice(idx, 1)
    saveCart(items)
  }
  return items
}

function clear() {
  saveCart([])
  return []
}

// 向后兼容：旧代码中的 getItems 等价于 getCart
function getItems() {
  return getCart()
}

export default {
  STORAGE_KEY,
  getCart,
  getItems,
  saveCart,
  getTotalCount,
  addItem,
  updateCount,
  removeItem,
  clear,
  syncTabBadge(index = 2) {
    try {
      const total = getTotalCount()
      if (total > 0) {
        const text = total > 99 ? '99+' : String(total)
        const result = uni.setTabBarBadge({ index, text })
        // 处理 Promise rejection（H5 环境）
        if (result instanceof Promise) {
          result.catch(() => {})
        }
      } else {
        const result = uni.removeTabBarBadge({ index })
        // 处理 Promise rejection（H5 环境）
        if (result instanceof Promise) {
          result.catch(() => {})
        }
      }
    } catch (e) {
      // 静默处理：当在非TabBar页面调用时不显示错误
    }
  }
}